home *** CD-ROM | disk | FTP | other *** search
- unit Main;
-
- { This unit contains code for a test MDI program demonstrating
- the use of the undo.pas unit.
-
- Author : Warren Kovach (wlk@kovcomp.co.uk)
- Published in The Delphi Magazine }
-
- interface
-
- uses WinTypes, WinProcs, SysUtils, Classes, Graphics, Forms, Controls, Menus,
- StdCtrls, Dialogs, Buttons, Messages, ExtCtrls;
-
- type
- TMainForm = class(TForm)
- MainMenu1: TMainMenu;
- Panel1: TPanel;
- StatusLine: TPanel;
- File1: TMenuItem;
- Panel2: TPanel;
- Window1: TMenuItem;
- FileExitItem: TMenuItem;
- WindowCascadeItem: TMenuItem;
- WindowTileItem: TMenuItem;
- WindowArrangeItem: TMenuItem;
- Edit1: TMenuItem;
- WindowMinimizeItem: TMenuItem;
- Undo1: TMenuItem;
- Redo1: TMenuItem;
- N3: TMenuItem;
- WindowNewGraphics1: TMenuItem;
- WindowNewText1: TMenuItem;
- WindowChangeFont1: TMenuItem;
- procedure FormCreate(Sender: TObject);
- procedure WindowCascadeItemClick(Sender: TObject);
- procedure UpdateMenuItems(Sender: TObject);
- procedure WindowTileItemClick(Sender: TObject);
- procedure WindowArrangeItemClick(Sender: TObject);
- procedure FileExitItemClick(Sender: TObject);
- procedure WindowMinimizeItemClick(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- procedure FormShow(Sender: TObject);
- procedure WindowNewGraphics1Click(Sender: TObject);
- procedure WindowNewText1Click(Sender: TObject);
- procedure WindowChangeFont1Click(Sender: TObject);
- private
- { Private declarations }
- procedure ShowHint(Sender: TObject);
- procedure IdleHandler(Sender: TObject; var Done: Boolean);
- procedure WMInitMenuPopup(var Message : TWMInitMenuPopup); message WM_INITMENUPOPUP;
- public
- { Public declarations }
- end;
-
- var
- MainForm: TMainForm;
-
- implementation
-
- {$R *.DFM}
-
- uses TextWin, GraphWin, Undo;
-
- procedure TMainForm.FormCreate(Sender: TObject);
- begin
- Application.OnHint := ShowHint;
- Screen.OnActiveFormChange := UpdateMenuItems;
- Application.OnIdle:= IdleHandler;
- { must do this at run-time because object inspector doen't
- list this alternative }
- Redo1.ShortCut := ShortCut(Word('Z'),[ssShift,ssCtrl]);
- end;
-
- procedure TMainForm.FormDestroy(Sender: TObject);
- begin
- Screen.OnActiveFormChange := nil;
- end;
-
- procedure TMainForm.FormShow(Sender: TObject);
- begin
- TGraphicWindow.Create(Application);
- TTextWindow.Create(Application);
- end;
-
- procedure TMainForm.ShowHint(Sender: TObject);
- begin
- StatusLine.Caption := Application.Hint;
- end;
-
- procedure TMainForm.FileExitItemClick(Sender: TObject);
- begin
- Close;
- end;
-
- procedure TMainForm.WindowCascadeItemClick(Sender: TObject);
- begin
- Cascade;
- end;
-
- procedure TMainForm.WindowTileItemClick(Sender: TObject);
- begin
- Tile;
- end;
-
- procedure TMainForm.WindowArrangeItemClick(Sender: TObject);
- begin
- ArrangeIcons;
- end;
-
- procedure TMainForm.WindowMinimizeItemClick(Sender: TObject);
- var
- I: Integer;
- begin
- { Must be done backwards through the MDIChildren array }
- for I := MDIChildCount - 1 downto 0 do
- MDIChildren[I].WindowState := wsMinimized;
- end;
-
- procedure TMainForm.WindowNewGraphics1Click(Sender: TObject);
- begin
- TGraphicWindow.Create(Application);
- end;
-
- procedure TMainForm.WindowNewText1Click(Sender: TObject);
- begin
- TTextWindow.Create(Application);
- end;
-
- procedure TMainForm.UpdateMenuItems(Sender: TObject);
- begin
- WindowCascadeItem.Enabled := MDIChildCount > 0;
- WindowTileItem.Enabled := MDIChildCount > 0;
- WindowArrangeItem.Enabled := MDIChildCount > 0;
- WindowMinimizeItem.Enabled := MDIChildCount > 0;
- if ActiveMDIChild is TUndoForm then begin
- with TUndoForm(ActiveMDIChild) do
- if UndoStack <> nil then
- UndoStack.SetUndoMenuItems(Undo1,Redo1)
- else
- DisableUndoMenus(Undo1,Redo1);
- end;
- WindowChangeFont1.Enabled := ActiveMDIChild is TTextWindow;
- end;
-
- procedure TMainForm.WMInitMenuPopup(var Message : TWMInitMenuPopup);
- begin
- UpdateMenuItems(self);
- inherited;
- end;
-
- procedure TMainForm.IdleHandler(Sender: TObject; var Done: Boolean);
- { must also reset undo/redo menu items enabled property at all
- opportunities; otherwise shortcut keys will not work until menu
- pulled down, since they are disabled by default }
- begin
- UpdateMenuItems(Sender);
- { clear all messages before exiting, otherwise changes to menu
- items may cause this to be fired again and again, particularly if
- a lot of changes need to be made. }
- Application.ProcessMessages;
- end;
-
- procedure TMainForm.WindowChangeFont1Click(Sender: TObject);
- begin
- if ActiveMDIChild is TTextWindow then
- TTextWindow(ActiveMDIChild).ChangeFont;
- end;
-
- end.
-